package cn.stylefeng.guns.modular.gridsystem.timer;

import cn.hutool.core.date.DateField;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.stylefeng.guns.core.timer.TimerTaskRunner;
import cn.stylefeng.guns.modular.gridsystem.constants.GatewayDataReportStatusConstant;
import cn.stylefeng.guns.modular.gridsystem.entity.BizGateway;
import cn.stylefeng.guns.modular.gridsystem.mapper.BizGatewayMapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import java.text.SimpleDateFormat;

/**
 * 网关数据上报开关处理定时任务
 *
 * @author zxw 2022/12/26 8:06
 */
@Slf4j
@Component
@RequiredArgsConstructor
public class GatewayDataReportRunner implements TimerTaskRunner {

    private final BizGatewayMapper gatewayMapper;

    @Override
    public void action() {

        // 获取10分钟前的时间
        DateTime time = DateUtil.offset(DateTime.now(), DateField.MINUTE, -10);
        // log.info(">>> 10分钟前的时间是：{}", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(time));

        // 将所有大于10分钟前的数据上报全部关闭且将数据上报时间置空
        gatewayMapper.update(null, new LambdaUpdateWrapper<BizGateway>()
                .lt(BizGateway::getDataReportOpenTime, time)
                .eq(BizGateway::getDataReportingSwitch, GatewayDataReportStatusConstant.ON)
                // 关闭数据上报
                .set(BizGateway::getDataReportingSwitch, GatewayDataReportStatusConstant.OFF)
                // 数据上报时间置空
                .set(BizGateway::getDataReportOpenTime, null));

    }

}
